<?php

namespace app\admin\controller;

use app\admin\model\SystemRole;
use think\Controller;
use think\Db;

/**
 * 角色
 */
class Role extends Basic
{
    // 初始化
    public function _initialize()
    {
        parent::_initialize();
    }


    /**
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * 返回所有菜单
     */
    public function getAllMenu()
    {
        //实例化数据库
        $SystemMenu = new \app\admin\model\SystemMenu();
        //查询条件 不显示status=0删除的数据
        $map['status'] = array('neq', 0);
        //查询数据
        $infoList = $SystemMenu->where($map)->order('sort')->field('id,pid,name')->select();
        //获得树形结构数据
        $info = menuTree($infoList, 0);
        if ($info) {
            json_success($info);
        } else {
            json_success([]);
        }
    }


    /**
     * 角色列表
     */
    public function index()
    {
        //实例化数据库
        $systemRole = new SystemRole();
        $list = $systemRole->where(array('status'=>array('neq',0)))->select();
        if ($list) {
            $infoList = array(
                'list'=>$list,
                'count'=>$systemRole->where(array('status'=>1))->count()
            );
            json_success($infoList);
        } else {
            $infoList = array(
                'list'=>[],
                'count'=>0
            );
            json_success($infoList);
        }
    }

    /**
     * 添加角色
     */
    public function add()
    {
        //实例化数据库
        $name = input('name');
        $sort= input('sort',1);
        $status= input('status',1);
        $menu_ids = input('menu_ids/a');
        if (!$name) {
            json_fail('角色名不能为空!');
        }
        if (!$menu_ids) {
            json_fail('菜单id不能为空');
        }
        //实例化数据库
        $systemRole = new SystemRole();
        $is_true = $systemRole->isTrue($name);
        if ($is_true) {
            json_fail('角色名已存在');
        }

        //要添加的数据
        $addData = array(
            'name'=>$name,
            'sort'=>$sort,
            'menu_id'=>json_encode($menu_ids),
            'status'=>$status
        );
        $id = $systemRole->insertGetId($addData);
        if (!$id) {
            json_fail('添加失败');
        } else {
            json_success($id);
        }
    }

    /**
     * 展示修改
     */
    public function show_edit(){
        $role_id = input('role_id');
        if(!$role_id){
            json_fail('获取角色id错误');
        }
        //实例化数据库
        $systemRole = new SystemRole();
        $info = $systemRole->where(array('id'=>$role_id))->find();

        if($info){
            $info['menu_id'] = json_decode($info['menu_id']);
        }
        json_success($info);
    }

    /**
     * 修改
     */
    public function edit()
    {
        //实例化数据库
        $role_id = input('role_id');
        $name = input('name');
        $sort= input('sort',1);
        $status= input('status',1);
        $menu_ids = input('menu_ids/a');
        if(!$role_id){
            json_fail('获取角色id错误');
        }
        if (!$name) {
            json_fail('角色名不能为空!');
        }
        if (!$menu_ids) {
            json_fail('菜单id不能为空');
        }
        //实例化数据库
        $systemRole = new SystemRole();
        $is_true = $systemRole->isMineTrue($name,$role_id);
        if ($is_true) {
            json_fail('角色名已存在');
        }

        //要添加的数据
        $saveData = array(
            'name'=>$name,
            'sort'=>$sort,
            'menu_id'=>json_encode($menu_ids),
            'status'=>$status
        );
        $result = $systemRole->where(array('id'=>$role_id))->update($saveData);
        if ($result === false) {
            json_fail('修改失败');
        } else {
            json_success('修改成功');
        }
    }

    /**
     * 删除
     */
    public function delete_role()
    {
        $role_id = input('role_id');
        
        if(!$role_id){
            json_fail('获取角色id错误');
        }
        //实例化数据库
        $systemRole = new SystemRole();
        $info = $systemRole->where(array('id'=>$role_id))->update(array('status'=>0));
        if($info === false){
            json_fail('删除失败');
        }
        json_success('删除成功');
    }


}